module EStep {
    // Ionic Starter App

    // angular.module is a global place for creating, registering and retrieving Angular modules
    // 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
    // the 2nd parameter is an array of 'requires'
    // 'starter.services' is found in services.js
    // 'starter.controllers' is found in controllers.js
    angular.module('EStep', ['ionic'])
        .run(['$ionicPlatform', '$ionicPopup', '$location', '$ionicHistory', 'PluginService', function ($ionicPlatform, $ionicPopup, $location, $ionicHistory, PluginService: PluginService) {
            PluginService.SetIsReady(false);
            $ionicPlatform.ready(function () {
                if (window.cordova) {
                    console.log('running on device/emulator');
                } else {
                    console.log('running in dev mode');
                    return;
                }

                PluginService.SetIsReady(true);
                const device: Device = ionic.Platform.device();
                PluginService.SetDevice(device);
                // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
                // for form inputs)
                if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
                    cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
                    cordova.plugins.Keyboard.disableScroll(true);
                }
                if (window.StatusBar) {
                    // org.apache.cordova.statusbar required
                    StatusBar.styleDefault();
                }
                PluginService.SetBackground(cordova.plugins.backgroundMode);
                PluginService.SetWifiWizard(WifiWizard);

                $ionicPlatform.registerBackButtonAction(function (e) {
                    e.preventDefault();
                    function showConfirm() {
                        const confirmPopup = $ionicPopup.confirm({
                            title:      '<strong>退出应用?</strong>',
                            template:   '你确定要退出应用吗?',
                            okText:     '退出',
                            cancelText: '取消'
                        });
                        confirmPopup.then(function (res) {
                            if (res) {
                                ionic.Platform.exitApp();
                            } else {

                            }
                        });
                    }

                    console.log('$location.path()' + $location.path());

                    if ($location.path() == '/home/homeInfo') {
                        showConfirm();
                    } else if ($ionicHistory.backView()) {
                        $ionicHistory.goBack();
                    } else {
                        showConfirm();
                    }
                    return false;
                }, 101);

            });
        }])
        .factory('$moment', ['$window',
            function ($window) {
                return $window.moment;
            }])
        .config([
            '$ionicConfigProvider', function ($ionicConfigProvider) {
                $ionicConfigProvider.tabs.position("bottom"); // other values: top
                $ionicConfigProvider.views.maxCache(10);
            }
        ])
        .config(function ($stateProvider, $urlRouterProvider) {
            // Ionic uses AngularUI Router which uses the concept of states
            // Learn more here: https://github.com/angular-ui/ui-router
            // Set up the various states which the app can be in.
            // Each state's controller can be found in controllers.js
            $stateProvider

            // setup an abstract state for the tabs directive
                .state('tab', {
                    url:         '/tab',
                    abstract:    true,
                    templateUrl: 'templates/tabs.html'
                })

                // Each tab has its own nav history stack:

                .state('tab.dash', {
                    url:   '/dash',
                    views: {
                        'tab-dash': {
                            templateUrl: 'templates/tab-dash.html',
                            controller:  'DashCtrl as ctrl'
                        }
                    }
                })

                .state('tab.chats', {
                    url:   '/chats',
                    views: {
                        'tab-chats': {
                            templateUrl: 'templates/tab-chats.html',
                            controller:  'ChatsCtrl as ctrl'
                        }
                    }
                })
                .state('tab.chat-detail', {
                    url:   '/chats/:chatId',
                    views: {
                        'tab-chats': {
                            templateUrl: 'templates/chat-detail.html',
                            controller:  'ChatDetailCtrl as ctrl'
                        }
                    }
                })

                .state('tab.account', {
                    url:   '/account',
                    views: {
                        'tab-account': {
                            templateUrl: 'templates/tab-account.html',
                            controller:  'AccountCtrl as ctrl'
                        }
                    }
                });

            // if none of the above states are matched, use this as the fallback
            $urlRouterProvider.otherwise('/tab/dash');

        });
}


